//  This file is part of Swordbible - http://www.swordwarrior.net
//  Copyright (C) 2003-2008 Manu Mital mital.manu@gmail.com

//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2, or (at your option)
//  any later version.

//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.

//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software Foundation,
//  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.



// SwordBibleDoc.cpp : implementation of the CSwordBibleDoc class
//

#include "stdafx.h"
#include "SwordBible.h"

#include "SwordBibleDoc.h"
#include ".\SwordBibledoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// static variables



/******************************** Main bible attributes ********************************/

sword::VerseKey CSwordBibleDoc::key;    // the active bible key
BOOL CSwordBibleDoc::bibleZoom = FALSE;  // zoom button on the bible is on or off
BOOL CSwordBibleDoc::bibleSplit = FALSE;  // zoom button on the bible is on or off

sword::SWModule*  CSwordBibleDoc::pRTFBibleModule[nBibles];
int CSwordBibleDoc::numBiblesAvailable = 0;
CStringArray CSwordBibleDoc::VerseHistory;

/******************************** Notes display attributes ********************************/
int CSwordBibleDoc::curNotesChapter = 1;			// the active chapter in the notes section
CString CSwordBibleDoc::curNotesBook = "Genesis";	// the active book in the notes section
BOOL CSwordBibleDoc::notesSynch;					// synchronize notes with main bible position?
BOOL CSwordBibleDoc::notesBold;
BOOL CSwordBibleDoc::notesItalic;
BOOL CSwordBibleDoc::notesUnderline;
BOOL CSwordBibleDoc::notesParaRight;
BOOL CSwordBibleDoc::notesParaCenter;
BOOL CSwordBibleDoc::notesParaLeft;

/******************************** Bottom modules display attributes ********************************/

BOOL CSwordBibleDoc::bottomSynch;  // synchronize bottom with main bible position?
sword::VerseKey CSwordBibleDoc::curBottomKey = "Gen 1";    // the active bottom key
BOOL CSwordBibleDoc::bottomZoom = FALSE;  // zoom button on the bible is on or off
sword::SWModule*  CSwordBibleDoc::pRTFComModule[nBottom];
int CSwordBibleDoc::numComAvailable = 0;

/**************************************** Bottom Left modules attributes *****************************/

int CSwordBibleDoc::numDictAvailable = 0;
BOOL CSwordBibleDoc::dictZoom = FALSE;
sword::SWModule* CSwordBibleDoc::pRTFDictModule[nBottomLeft];

/**************************************** General Books attributes ********************************/
BOOL CSwordBibleDoc::GenBookZoom = FALSE;
int CSwordBibleDoc::numGenBooksAvailable = 0;
sword::SWModule * CSwordBibleDoc::pRTFGenBooks[nGenBooks];
sword::TreeKeyIdx * CSwordBibleDoc::GenBookTree;
sword::SWKey CSwordBibleDoc::GenBookKey;

/**************************************** Devotional modules attributes *****************************/
BOOL CSwordBibleDoc::devotion_startup;
sword::SWKey CSwordBibleDoc::devotionKey = NULL;
BOOL CSwordBibleDoc::devZoom = FALSE;
CString CSwordBibleDoc::monthNames[12] = {"JAN", "FEB", "MAR","APR","MAY","JUNE","JULY", "AUG","SEP","OCT","NOV","DEC"};
sword::SWModule* CSwordBibleDoc::pRTFDevModule[nDevotional];
int CSwordBibleDoc::numDevAvailable = 0;

/**************************************** One Year Daily Bible *****************************/
BOOL CSwordBibleDoc::dailybibleZoom = FALSE;  // zoom button on the daily bible is on or off


/******************************** General/Global Attributes ********************************/
BOOL CSwordBibleDoc::rememberLastVerse = TRUE;  // jump to the last active verse in previous session
BOOL CSwordBibleDoc::crossref_tags = TRUE;
sword::SWModule * CSwordBibleDoc::pXrefModuleActive = NULL;
BOOL CSwordBibleDoc::heading_tags = TRUE;
BOOL CSwordBibleDoc::showTitle = TRUE;
BOOL CSwordBibleDoc::lemma_tags = TRUE;
BOOL CSwordBibleDoc::morph_tags = TRUE;
BOOL CSwordBibleDoc::fn_tags = TRUE;
BOOL CSwordBibleDoc::redchrist_tags = TRUE;




// names of the books of the bible
//columns = Book name abbreviation, # of chapters, # over verses in each book
// 66 books in the bible
CString CSwordBibleDoc::bookCode[66][4] = {  
  {"Genesis", "Gen", "50","1533"},
  {"Exodus", "Exod", "40","1213"},
  {"Leviticus", "Lev", "27","859"},
  {"Numbers", "Num", "36","1288"},
  {"Deuteronomy", "Deut", "34","959"},
  {"Joshua", "Josh", "24","658"},
  {"Judges", "Judg", "21","618"},
  {"Ruth", "Ruth", "4","85"},
  {"I Samuel", "1Sam", "31","810"},
  {"II Samuel", "2Sam", "24","695"},
  {"I Kings", "1Kgs", "22","816"},
  {"II Kings", "2Kgs", "25","719"},
  {"I Chronicles", "1Chr", "29","942"},
  {"II Chronicles", "2Chr", "36","822"},
  {"Ezra", "Ezra", "10","280"},
  {"Nehemiah", "Neh", "13","406"},
  {"Esther", "Esth", "10","167"},
  {"Job", "Job", "42","1070"},
  {"Psalms", "Ps", "150","2461"},
  {"Proverbs", "Prov", "31","915"},
  {"Ecclesiastes", "Eccl", "12","222"},
  {"Song of Solomon", "Song", "8","117"},
  {"Isaiah", "Isa", "66","1292"},
  {"Jeremiah", "Jer", "52","1364"},
  {"Lamentations", "Lam", "5","154"},
  {"Ezekiel", "Ezek", "48","1273"},
  {"Daniel", "Dan", "12","357"},
  {"Hosea", "Hos", "14","197"},
  {"Joel", "Joel", "3","73"},
  {"Amos", "Amos", "9","146"},
  {"Obadiah", "Obad", "1","21"},
  {"Jonah", "Jonah", "4","48"},
  {"Micah", "Mic", "7","105"},
  {"Nahum", "Nah", "3","47"},
  {"Habakkuk", "Hab", "3","56"},
  {"Zephaniah", "Zeph", "3","53"},
  {"Haggai", "Hag", "2","38"},
  {"Zechariah", "Zech", "14","211"},
  {"Malachi", "Mal", "4","55"},
  {"Matthew", "Matt", "28","1071"},
  {"Mark", "Mark", "16","678"},
  {"Luke", "Luke", "24","1151"},
  {"John", "John", "21","879"},
  {"Acts", "Acts", "28","1007"},
  {"Romans", "Rom", "16","433"},
  {"I Corinthians", "1Cor", "16","437"},
  {"II Corinthians", "2Cor", "13","257"},
  {"Galatians", "Gal", "6","149"},
  {"Ephesians", "Eph", "6","155"},
  {"Philippians", "Phil", "4","104"},
  {"Colossians", "Col", "4","95"},
  {"I Thessalonians", "1Thess", "5","89"},
  {"II Thessalonians", "2Thess", "3","47"},
  {"I Timothy", "1Tim", "6","113"},
  {"II Timothy", "2Tim", "4","83"},
  {"Titus", "Titus", "3","46"},
  {"Philemon", "Phlm", "1","25"},
  {"Hebrews", "Heb", "13","303"},
  {"James", "Jas", "5","108"},
  {"I Peter", "1Pet", "5","105"},
  {"II Peter", "2Pet", "3","61"},
  {"I John", "1John", "5","105"},
  {"II John", "2John", "1","13"},
  {"III John", "3John", "1","14"},
  {"Jude", "Jude", "1","25"},
  {"Revelation of John", "Rev", "22","404"}
};

int CSwordBibleDoc::VerseCount[66][151] = {
	// Genesis
	{31, 25, 24, 26, 32, 22, 24, 22, 29, 32, 32, 20, 18, 24, 21, 16, 27, 33, 38, 18, 34, 24, 20, 67, 34, 35, 46, 22, 35, 43, 55, 32, 20, 31, 29, 43, 36, 30, 23, 23, 57, 38, 34, 34, 28, 34, 31, 22, 33, 26}, 
	// Exodus
	{22, 25, 22, 31, 23, 30, 25, 32, 35, 29, 10, 51, 22, 31, 27, 36, 16, 27, 25, 26, 36, 31, 33, 18, 40, 37, 21, 43, 46, 38, 18, 35, 23, 35, 35, 38, 29, 31, 43, 38}, 
	// Leviticus
	{17, 16, 17, 35, 19, 30, 38, 36, 24, 20, 47, 8, 59, 57, 33, 34, 16, 30, 37, 27, 24, 33, 44, 23, 55, 46, 34}, 
	// Numbers
	{54, 34, 51, 49, 31, 27, 89, 26, 23, 36, 35, 16, 33, 45, 41, 50, 13, 32, 22, 29, 35, 41, 30, 25, 18, 65, 23, 31, 40, 16, 54, 42, 56, 29, 34, 13}, 
	// Deuteronomy
	{46, 37, 29, 49, 33, 25, 26, 20, 29, 22, 32, 32, 18, 29, 23, 22, 20, 22, 21, 20, 23, 30, 25, 22, 19, 19, 26, 68, 29, 20, 30, 52, 29, 12}, 
	// Joshua
	{18, 24, 17, 24, 15, 27, 26, 35, 27, 43, 23, 24, 33, 15, 63, 10, 18, 28, 51, 9, 45, 34, 16, 33}, 
	// Judges
	{36, 23, 31, 24, 31, 40, 25, 35, 57, 18, 40, 15, 25, 20, 20, 31, 13, 31, 30, 48, 25}, 
	// Ruth
	{	22, 23, 18, 22}, 
	// I Samual
	{	28, 36, 21, 22, 12, 21, 17, 22, 27, 27, 15, 25, 23, 52, 35, 23, 58, 30, 24, 42, 15, 23, 29, 22, 44, 25, 12, 25, 11, 31, 13}, 
	// II Samuel
	{	27, 32, 39, 12, 25, 23, 29, 18, 13, 19, 27, 31, 39, 33, 37, 23, 29, 33, 43, 26, 22, 51, 39, 25}, 
	// I Kings
	{	53, 46, 28, 34, 18, 38, 51, 66, 28, 29, 43, 33, 34, 31, 34, 34, 24, 46, 21, 43, 29, 53}, 
	// II Kings
	{	18, 25, 27, 44, 27, 33, 20, 29, 37, 36, 21, 21, 25, 29, 38, 20, 41, 37, 37, 21, 26, 20, 37, 20, 30}, 
	// I Chronicles
	{	54, 55, 24, 43, 26, 81, 40, 40, 44, 14, 47, 40, 14, 17, 29, 43, 27, 17, 19, 8, 30, 19, 32, 31, 31, 32, 34, 21, 30}, 
	// II Chronicles
	{	17, 18, 17, 22, 14, 42, 22, 18, 31, 19, 23, 16, 22, 15, 19, 14, 19, 34, 11, 37, 20, 12, 21, 27, 28, 23, 9, 27, 36, 27, 21, 33, 25, 33, 27, 23}, 
	// Ezra
	{	11, 70, 13, 24, 17, 22, 28, 36, 15, 44}, 
	// Nehemiah
	{	11, 20, 32, 23, 19, 19, 73, 18, 38, 39, 36, 47, 31}, 
	// Esther
	{	22, 23, 15, 17, 14, 14, 10, 17, 32, 3}, 
	// Job
	{	22, 13, 26, 21, 27, 30, 21, 22, 35, 22, 20, 25, 28, 22, 35, 22, 16, 21, 29, 29, 34, 30, 17, 25, 6, 14, 23, 28, 25, 31, 40, 22, 33, 37, 16, 33, 24, 41, 30, 24, 34, 17}, 
	// Psalms
	{	6, 12, 8, 8, 12, 10, 17, 9, 20, 18, 7, 8, 6, 7, 5, 11, 15, 50, 14, 9, 13, 31, 6, 10, 22, 12, 14, 9, 11, 12, 24, 11, 22, 22, 28, 12, 40, 22, 13, 17, 13, 11, 5, 26, 17, 11, 9, 14, 20, 23, 19, 9, 6, 7, 23, 13, 11, 11, 17, 12, 8, 12, 11, 10, 13, 20, 7, 35, 36, 5, 24, 20, 28, 23, 10, 12, 20, 72, 13, 19, 16, 8, 18, 12, 13, 17, 7, 18, 52, 17, 16, 15, 5, 23, 11, 13, 12, 9, 9, 5, 8, 28, 22, 35, 45, 48, 43, 13, 31, 7, 10, 10, 9, 8, 18, 19, 2, 29, 176, 7, 8, 9, 4, 8, 5, 6, 5, 6, 8, 8, 3, 18, 3, 3, 21, 26, 9, 8, 24, 13, 10, 7, 12, 15, 21, 10, 20, 14, 9, 6}, 
	// Proverbs
	{	33, 22, 35, 27, 23, 35, 27, 36, 18, 32, 31, 28, 25, 35, 33, 33, 28, 24, 29, 30, 31, 29, 35, 34, 28, 28, 27, 28, 27, 33, 31}, 
	// Ecclesiastes
	{	18, 26, 22, 16, 20, 12, 29, 17, 18, 20, 10, 14}, 
	// Song of Solomon
	{	17, 17, 11, 16, 16, 13, 13, 14}, 
	// Isaiah
	{	31, 22, 26, 6, 30, 13, 25, 22, 21, 34, 16, 6, 22, 32, 9, 14, 14, 7, 25, 6, 17, 25, 18, 23, 12, 21, 13, 29, 24, 33, 9, 20, 24, 17, 10, 22, 38, 22, 8, 31, 29, 25, 28, 28, 25, 13, 15, 22, 26, 11, 23, 15, 12, 17, 13, 12, 21, 14, 21, 22, 11, 12, 19, 12, 25, 24}, 
	// Jeremiah
	{	19, 37, 25, 31, 31, 30, 34, 22, 26, 25, 23, 17, 27, 22, 21, 21, 27, 23, 15, 18, 14, 30, 40, 10, 38, 24, 22, 17, 32, 24, 40, 44, 26, 22, 19, 32, 21, 28, 18, 16, 18, 22, 13, 30, 5, 28, 7, 47, 39, 46, 64, 34}, 
	// Lamentations
	{	22, 22, 66, 22, 22}, 
	// Ezekiel
	{	28, 10, 27, 17, 17, 14, 27, 18, 11, 22, 25, 28, 23, 23, 8, 63, 24, 32, 14, 49, 32, 31, 49, 27, 17, 21, 36, 26, 21, 26, 18, 32, 33, 31, 15, 38, 28, 23, 29, 49, 26, 20, 27, 31, 25, 24, 23, 35}, 
	// Daniel
	{	21, 49, 30, 37, 31, 28, 28, 27, 27, 21, 45, 13}, 
	// Hosea
	{	11, 23, 5, 19, 15, 11, 16, 14, 17, 15, 12, 14, 16, 9}, 
	// Joel
	{	20, 32, 21}, 
	// Amos
	{	15, 16, 15, 13, 27, 14, 17, 14, 15}, 
	// Obadiah
	{	21}, 
	// Jonah
	{	17, 10, 10, 11}, 
	// Micah
	{	16, 13, 12, 13, 15, 16, 20}, 
	// Nahum
	{	15, 13, 19}, 
	// Habakkuk
	{	17, 20, 19}, 
	// Zephaniah
	{	18, 15, 20}, 
	// Haggai
	{	15, 23}, 
	// Zechariah
	{	21, 13, 10, 14, 11, 15, 14, 23, 17, 12, 17, 14, 9, 21}, 
	// Malachi
	{	14, 17, 18, 6},
	// -----------------------------------------------------------------
	// Matthew
	{	25, 23, 17, 25, 48, 34, 29, 34, 38, 42, 30, 50, 58, 36, 39, 28, 27, 35, 30, 34, 46, 46, 39, 51, 46, 75, 66, 20},
	// Mark
	{	45, 28, 35, 41, 43, 56, 37, 38, 50, 52, 33, 44, 37, 72, 47, 20},
	// Luke
	{	80, 52, 38, 44, 39, 49, 50, 56, 62, 42, 54, 59, 35, 35, 32, 31, 37, 43, 48, 47, 38, 71, 56, 53},
	// John
	{	51, 25, 36, 54, 47, 71, 53, 59, 41, 42, 57, 50, 38, 31, 27, 33, 26, 40, 42, 31, 25},
	// Acts
	{	26, 47, 26, 37, 42, 15, 60, 40, 43, 48, 30, 25, 52, 28, 41, 40, 34, 28, 41, 38, 40, 30, 35, 27, 27, 32, 44, 31},
	// Romans
	{	32, 29, 31, 25, 21, 23, 25, 39, 33, 21, 36, 21, 14, 23, 33, 27},
	// I Corinthians
	{	31, 16, 23, 21, 13, 20, 40, 13, 27, 33, 34, 31, 13, 40, 58, 24},
	// II Corinthians
	{	24, 17, 18, 18, 21, 18, 16, 24, 15, 18, 33, 21, 14},
	// Galatians
	{	24, 21, 29, 31, 26, 18},
	// Ephesians
	{	23, 22, 21, 32, 33, 24},
	// Philippians
	{	30, 30, 21, 23},
	// Colossians
	{	29, 23, 25, 18},
	// I Thessalonians
	{	10, 20, 13, 18, 28},
	// II Thessalonians
	{	12, 17, 18},
	// I Timothy
	{	20, 15, 16, 16, 25, 21},
	// II Timothy
	{	18, 26, 17, 22},
	// Titus
	{	16, 15, 15},
	// Philemon
	{	25},
	// Hebrews
	{	14, 18, 19, 16, 14, 20, 28, 13, 28, 39, 40, 29, 25},
	// James
	{	27, 26, 18, 17, 20},
	// I Peter
	{	25, 25, 22, 19, 14},
	// II Peter
	{	21, 22, 18},
	// I John
	{	10, 29, 24, 21, 21},
	// II John
	{	13},
	// III John
	{	14},
	// Jude
	{	25},
	// Revelation of John
	{	20, 29, 22, 11, 14, 17, 17, 13, 21, 11, 19, 17, 18, 20, 8, 21, 18, 24, 21, 15, 27, 21}
};



// CSwordBibleDoc

IMPLEMENT_DYNCREATE(CSwordBibleDoc, CDocument)

BEGIN_MESSAGE_MAP(CSwordBibleDoc, CDocument)
END_MESSAGE_MAP()


// CSwordBibleDoc construction/destruction

CSwordBibleDoc::CSwordBibleDoc()
{
	
	// the active bible key
	rememberLastVerse = AfxGetApp()->GetProfileInt("General Options","Remember Last",TRUE);
	if(rememberLastVerse) // jump to the last active verse in previous session
		key = AfxGetApp()->GetProfileString("BiblePage","LastKey", "III John 1:1");
	else key = "III John 1:1";
    
	// synchronize bottom with main bible position?
	bottomSynch = AfxGetApp()->GetProfileInt("Bottom","Synchronize",TRUE);  

	// synchronize notes with main bible position?
	notesSynch = AfxGetApp()->GetProfileInt("Notes","Synchronize",TRUE);

	// show devotional on startup
	devotion_startup = AfxGetApp()->GetProfileInt("Devotional","Startup",FALSE);


	// dispaly the lemma, morphological, footnote tags?
	lemma_tags =  AfxGetApp()->GetProfileInt("Tags","lemma_tags",TRUE);
	morph_tags = AfxGetApp()->GetProfileInt("Tags","morph_tags",TRUE);
	fn_tags = AfxGetApp()->GetProfileInt("Tags","fn_tags",TRUE);
	crossref_tags = AfxGetApp()->GetProfileInt("Tags","crossref_tags",TRUE);
	heading_tags = AfxGetApp()->GetProfileInt("Tags","heading_tags",TRUE);
	redchrist_tags = AfxGetApp()->GetProfileInt("Tags","redchrist_tags",TRUE);




}

CSwordBibleDoc::~CSwordBibleDoc()
{

}

BOOL CSwordBibleDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}




// CSwordBibleDoc serialization

void CSwordBibleDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}


// CSwordBibleDoc diagnostics

#ifdef _DEBUG
void CSwordBibleDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CSwordBibleDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG





// returns the book index of the current key min:1  max:66
int CSwordBibleDoc::Book()
{
	return (CSwordBibleDoc::key.Testament() - 1) *39 +  CSwordBibleDoc::key.Book();

}

int CSwordBibleDoc::Chapter()
{

	return key.Chapter();
}

int CSwordBibleDoc::Verse()
{
	return key.Verse();
}

int CSwordBibleDoc::bottomChapter()
{

	return curBottomKey.Chapter();
}

int CSwordBibleDoc::bottomBook()
{
	return   (CSwordBibleDoc::curBottomKey.Testament() - 1) *39 +  CSwordBibleDoc::curBottomKey.Book();
}

int CSwordBibleDoc::bottomVerse()
{

	return curBottomKey.Verse();
}

